iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Mobile Development

Android Studio初學系列 第 21

Android Studio初學 DAY21 Thread線程

  • 分享至 

  • xImage
  •  

什麼是線程?

線程是程序執行的最小單位,它代表了在單個程序中的獨立執行流。一個 Java 程序實際上是一個包含一個或多個線程的進程。每個線程都有自己的執行路徑,可以並行執行不同的任務

Java中的線程

在Java中,線程是通過 java.lang.Thread 類來表示的。要創建一個線程,通常有兩種方法:

1.繼承Thread類:您可以創建一個繼承自Thread 類的新類,並覆蓋 run 方法,該方法包含您要在線程中執行的代碼,然後可以實例化這個新類並調用 start 方法來啟動線程

class MyThread extends Thread {
    public void run() {
        // 線程執行的代碼
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start(); // 啟動線程
    }
}

2.實現 Runnable 接口:另一種創建線程的方法是實現 java.lang.Runnable 接口。這允許您將 Runnable 對象傳遞給 Thread 構造函數,並在 run 方法中定義線程的行為

class MyRunnable implements Runnable {
    public void run() {
        // 線程執行的代碼
    }
}

public class Main {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start(); // 啟動線程
    }
}

啟動和運行線程

要啟動線程,需要調用線程對象的 start 方法。這將啟動線程,並在後台運行與 run 方法關聯的代碼。不要直接調用 run 方法,因為這將在當前線程中運行代碼,而不會創建新線程

Thread thread = new Thread(new MyRunnable());
thread.start(); // 啟動線程

線程的狀態

Java 線程有不同的狀態,包括:

New(新建):線程已經創建,但尚未啟動。
Runnable(可運行):線程正在 Java 虛擬機中執行。
Blocked(阻塞):線程被阻塞並等待某些條件的解除。
Waiting(等待):線程等待另一個線程執行特定操作。
Timed Waiting(計時等待):線程等待一段時間後繼續執行。
Terminated(終止):線程已完成執行。
您可以使用 Java 的線程狀態來監視和管理線程的執行。

線程同步

在多線程編程中,線程同步是一個關鍵概念。當多個線程訪問共享資源時,可能會導致數據不一致或競態條件。為了解決這些問題,可以使用 synchronized 或其他同步工具來協調線程的訪問。

public synchronized void synchronizedMethod() {
    // 在這裡執行線程安全的操作
}

線程生命周期管理

Java 提供了一些方法來管理線程的生命周期。可以使用 join 方法等待一個線程完成,或使用 interrupt 方法中斷線程的執行。還可以使用yield方法讓出CPU時間片給其他線程。

Thread thread = new Thread(new MyRunnable());
thread.start();

// 等待線程執行完成
try {
    thread.join();
} catch (InterruptedException e) {
    // 處理中斷異常
}

多線程編程是 Java 開發中的重要方面,允許利用多核處理器和提高程序的性能,今天就介紹到這邊,謝謝大家


上一篇
Android Studio初學 DAY20 Retrofit抓取API資料
下一篇
Android Studio初學 DAY22 理解 MVC、MVP 和 MVVM 架構模式
系列文
Android Studio初學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言